/*
 * c89.c - C89/C90 标准特性示例
 * 
 * C89/C90 (ANSI X3.159-1989, ISO/IEC 9899:1990) 是第一个正式的C语言标准
 * 本示例展示了C89标准的基本特性
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* C89要求所有局部变量必须在函数开头声明 */
void basic_features() {
    int a;
    float b;
    char c;
    int array[10];
    char string[20];
    
    /*基本数据类型和初始化*/ 
    a = 10;
    b = 3.14f;
    c = 'A';
    
    /*字符串操作*/
    strcpy(string, "Hello C89");
    
    /* 数组访问*/
    array[0] = 1;
    
    /* 输出示例*/
    printf("Integer: %d\n", a);
    printf("Float: %f\n", b);
    printf("Character: %c\n", c);
    printf("String: %s\n", string);
    printf("Array first element: %d\n", array[0]);
}

/* C89中的函数定义和参数传递*/
int add(int x, int y) {
    return x + y;
}


/* 结构体 */
struct Point {
    int x;
    int y;
};

void struct_example() {
    struct Point p;
    p.x = 10;
    p.y = 20;
    
    printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}

/* 预处理器指令 */
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define PI 3.14159

void preprocessor_examples() {
    int max_val = MAX(10, 20);
    printf("Max value: %d\n", max_val);
    printf("PI value: %f\n", PI);
}

/* C89不支持内联函数、可变参数宏、//单行注释等较新特性 */

void pointer_operations() {
    int value = 42;
    int *ptr;
    
    ptr = &value;
    
    printf("Value: %d\n", value);
    printf("Pointer address: %p\n", (void*)ptr);
    printf("Pointer value: %d\n", *ptr);
    
    /* 修改指针指向的值 */
    *ptr = 100;
    printf("Modified value: %d\n", value);
}


/* C89不支持内联函数、可变参数宏、//单行注释等较新特性 */
int main() {
        /* C89要求所有局部变量必须在函数开头声明 */
    int sum;
    printf("=== C89/C90 Standard Features ===\n\n");
      
    basic_features();
    printf("\n");
    
    sum = add(5, 3);
    printf("Sum: %d\n\n", sum);
    
    pointer_operations();
    printf("\n");
    
    struct_example();
    printf("\n");
    
    preprocessor_examples();
    
    return 0;
}